package main

import (
	"fmt"
	"log"
	"net"
	"net/rpc"

	"gitee.com/yangdechao719/rpc-g7/rpc_interface/service"
)

// 约束服务端接口的实现
var _ service.HelloService = (*HelloService)(nil)

// service handler
type HelloService struct {
}

// request：请求
// response：响应
// request --> name
// response <-- hello, name
func (s *HelloService) Hello(requset string, response *string) error {
	*response = fmt.Sprintf("hello,%s", requset)
	return nil
}

// main 里面编写Server
func main() {
	// 把rpc对外暴露的对象注册到rpc框架内部
	rpc.RegisterName(service.SERVICE_NAME, &HelloService{})

	// 准备socket
	// 然后建立一个唯一的TCP连接
	listener, err := net.Listen("tcp", ":1234")
	if err != nil {
		log.Fatal("Listen TCP error:", err)
	}

	// 获取连接
	for {
		conn, err := listener.Accept()
		if err != nil {
			panic(err)
		}

		//每个客户端单独启用一个goroutine来处理
		go rpc.ServeConn(conn)
	}
}
